package com.sais.manage.boot.daily.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sais.manage.boot.daily.dto.ApplicationDTO;
import com.sais.manage.boot.daily.dto.ApplicationSearchDTO;
import com.sais.manage.boot.daily.dto.ApplicationSaveDTO;

import java.util.List;

/**
 * 宿舍管理系统-申请 service 接口
 *
 * @author zwp
 * @date 2020/2/2
 **/
public interface IApplicationService {

    /**
     * 申请 保存
     *
     * @param applicationSaveDTO
     * @return
     */
    boolean saveApplication(ApplicationSaveDTO applicationSaveDTO);

    /**
     * 申请 更新
     *
     * @param applicationSaveDTO
     * @return
     */
    boolean updateApplication(ApplicationSaveDTO applicationSaveDTO);

    /**
     * 申请 添加
     *
     * @param applicationSaveDTO
     * @return
     */
    boolean createApplication(ApplicationSaveDTO applicationSaveDTO);

    /**
     * 申请 删除
     *
     * @param applicationId
     * @return
     */
    boolean deleteApplication(String applicationId);

    /**
     * 申请 查询
     *
     * @param applicationId
     * @return
     */
    ApplicationDTO selectApplication(String applicationId);

    /**
     * 申请 分页条件 查询
     *
     * @param current
     * @param size
     * @param searchDTO
     * @return
     */
    Page<ApplicationDTO> listApplication(Integer current, Integer size, ApplicationSearchDTO searchDTO);

    /**
     * 查询 当前登录用户所管理的宿舍楼的申请
     *
     * @param userId
     * @param current
     * @param size
     * @param searchDTO
     * @return
     */
    Page<ApplicationDTO> listApplicationByManager(String userId, Integer current, Integer size, ApplicationSearchDTO searchDTO);

    /**
     * 更改 申请状态为通过
     *
     * @param applicationId
     * @return
     */
    boolean updateApplicationAcceptStatus(String applicationId);

    /**
     * 根据userId 查询该用户发出的申请
     *
     * @param userId
     * @return
     */
    List<ApplicationDTO> listApplicationByUserId(String userId);

    /**
     * 更改 申请状态为未通过
     *
     * @param applicationId
     * @return
     */
    boolean updateApplicationRefuseStatus(String applicationId);
}
